package main

import "fmt"

func main() {
	// scan scanf scanln

	// var n int                 // 0
	// var err error             // error是类型，是内件的接口类型，零值是 nil
	// var a, b string           // 零值
	// n, err = fmt.Scan(&a, &b) // stdin 多个值利用空白分割，换行符也是空白
	// if err != nil {
	// 	panic(err)
	// }
	// fmt.Println(n)
	// fmt.Printf("%T %[1]s, %T %[2]s\n", a, b) // %[1]s 表示第一个参数， %[2]s 表示第二个参数
	// fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")

	// var x, y int
	// n, err = fmt.Scan(&x, &y) // 力所能及的做了一些能做的类型转换
	// if err != nil {
	// 	panic(err)
	// }
	// fmt.Println(n)
	// fmt.Printf("%T %[1]d, %T %[1]d\n", x, y) // %[1]d 表示第一个参数的整数值

	// 示例 2
	var n int
	var err error
	var name string
	var age int
	fmt.Print("请按照顺序输入名字、年龄:")
	n, err = fmt.Scanf("%s %d", &name, &age) // \n 换行符不再作为空白
	if err != nil {
		panic(err)
	}
	fmt.Println(n)
	fmt.Printf("%T %[1]s, %T %[2]d\n", name, age)
	fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")

	var weight, height int
	_, err = fmt.Scanf("%d %d", &weight, &height) // 只读两个整数
	// fmt.Scan(&weight)
	// fmt.Scan(&height)
	fmt.Println(err)
	fmt.Printf("%T %[1]d|%T %[2]d\n", weight, height)
}
